//package com.whp.aop.mycomponent;
//
//import org.springframework.core.type.filter.AbstractTypeHierarchyTraversingFilter;
//
///**
// * @author wanghp
// * @version 1.0
// * @description: TODO
// * @date 2020/12/14 15:28
// */
//public class AsSignableTypeFilter extends AbstractTypeHierarchyTraversingFilter {
//
//
//	private final Class targetType;
//
//
//	/**
//	 * Create a new AssignableTypeFilter for the given type.
//	 *
//	 * @param targetType the type to match
//	 */
//	public AsSignableTypeFilter(Class targetType) {
//		super(true, true);
//		this.targetType = targetType;
//	}
//
//
//	@Override
//	protected boolean matchClassName(String className) {
//		return this.targetType.getName().equals(className);
//	}
//
//	@Override
//	protected Boolean matchSuperClass(String superClassName) {
//		return matchTargetType(superClassName);
//	}
//
//	@Override
//	protected Boolean matchInterface(String interfaceName) {
//		return matchTargetType(interfaceName);
//	}
//
//	protected Boolean matchTargetType(String typeName) {
//		if (this.targetType.getName().equals(typeName)) {
//			return true;
//		} else if (Object.class.getName().equals(typeName)) {
//			return Boolean.FALSE;
//		} else if (typeName.startsWith("java.")) {
//			try {
//				Class clazz = getClass().getClassLoader().loadClass(typeName);
//				return Boolean.valueOf(this.targetType.isAssignableFrom(clazz));
//			} catch (ClassNotFoundException ex) {
//				// Class not found - can't determine a match that way.
//			}
//		}
//		return null;
//	}
//
//}
